﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WcfServicioWeb.Logica
{
    public class EstadoActual
    {   
        private int retorno;
        private System.Timers.Timer tiempoEspera;
        private bool verificarTimer = false;
        private static EstadoActual _referencia = null;

        #region Getters & Setters

        public System.Timers.Timer TiempoEspera
        {
            get { return tiempoEspera; }
            set { tiempoEspera = value; }
        }

        public bool VerificarTimer
        {
            get { return verificarTimer; }
            set { verificarTimer = value; }
        }

        public int Retorno
        {
            get { return retorno; }
            set { retorno = value; }
        }

        #endregion Getters & Setters

        /**
	 * Metodo Singlon de la clase "Servicio"
	 * @return Servicio
	 */
        public static EstadoActual getInstance()
        {

            if (_referencia == null)
            {
                return (_referencia = new EstadoActual());
            }
            else
            {
                return (_referencia);
            }
        }

        /// <summary>
        /// Evento del Timer "tiempoEspera"
        /// se ejecutara cada 3 min
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void RespuestaTimer(object sender, EventArgs e)
        {
            object valor = null;
            valor = 0;
            Terrae.Clases.Arduino arduino = new Terrae.Clases.Arduino("COM5", 9600);

            // variables del tipo invernadero
            Terrae.Clases.Entidad _invernadero = Terrae.Clases.FabricaClase.FabricaEntidad.NuevoInvernadero();
            Terrae.Logica.Comandos.Comando<Terrae.Clases.Entidad> _comando;

            try
            {
               // valor = arduino.DigitalReadWrite("2");
                if (valor != null)
                {
                    (_invernadero as Terrae.Clases.Invernadero).Humedad.Nombre = "Humedad";
                    (_invernadero as Terrae.Clases.Invernadero).Humedad.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    (_invernadero as Terrae.Clases.Invernadero).Humedad.Medicion = valor.ToString();
                }
               // valor = arduino.DigitalReadWrite("1");
                if (valor != null)
                {
                    (_invernadero as Terrae.Clases.Invernadero).Temperatura.Nombre = "Temperatura";
                    (_invernadero as Terrae.Clases.Invernadero).Temperatura.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    (_invernadero as Terrae.Clases.Invernadero).Temperatura.Medicion = valor.ToString();
                }
               // valor = arduino.DigitalReadWrite("3");
                if (valor != null)
                {
                    (_invernadero as Terrae.Clases.Invernadero).Luminosidad.Nombre = "Luminosidad";
                    (_invernadero as Terrae.Clases.Invernadero).Luminosidad.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    (_invernadero as Terrae.Clases.Invernadero).Luminosidad.Medicion = valor.ToString();
                }
               // valor = arduino.DigitalReadWrite("4");
                if (valor != null)
                {
                    (_invernadero as Terrae.Clases.Invernadero).Acides.Nombre = "Acides";
                    (_invernadero as Terrae.Clases.Invernadero).Acides.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    (_invernadero as Terrae.Clases.Invernadero).Acides.Medicion = valor.ToString();
                }

                Retorno = 1;

                // Example #2: Write one string to a text file.
                string text = "Consulta de variables del invernadero: " +
                               DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                // WriteAllText creates a file, writes the specified string to the file,
                // and then closes the file.
                System.IO.File.WriteAllText(@"C:\Auditoria\ConsultarVariables.txt", text);
                
            }
            catch (Exception ex)
            {
                Retorno = 0;
            }
        }

        /// <summary>
        /// Metodo para consulta cada 3 min las variables
        /// del invernadero
        /// </summary>
        /// <returns></returns>
        public int ConsultarVariablesInvernaderoArduino()
        {
            try
            {
                // instancia de un objeto del tipo Timer
                tiempoEspera = new System.Timers.Timer();
                // colocamos el tiempo
                tiempoEspera.Interval = 120;
                // colocamos el timer como disponible
                tiempoEspera.Enabled = true;
                // asignamos le evento que se lanzara cada 3 min
                tiempoEspera.Elapsed += new System.Timers.ElapsedEventHandler(RespuestaTimer);
                // iniciamos le contador
                tiempoEspera.Start();

               
            }
            catch (Exception ex)
            {
                retorno = 0; 
            }

            return 1;
        }
    }
}